package com.mx.prueba.upload;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

@ManagedBean(name = "pacienteFotosMB")
@ViewScoped
public class PacienteFotosMB implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6913701283506244102L;
	private UploadedFile fotoPaciente;
	private String nombrePaciente;

	public void upload() {
		System.out.println("Entramos a PacienteFotosMB.upload()");
		if (fotoPaciente != null) {
			FacesMessage message = new FacesMessage("Succesful", fotoPaciente.getFileName() + " is uploaded.");
			FacesContext.getCurrentInstance().addMessage(null, message);
		}
	}

	public void handleFileUpload(FileUploadEvent event) {
		System.out.println("Entramos a PacienteFotosMB.handleFileUpload()");
		System.out.println("event.getFile().getFileName() " + event.getFile().getFileName());
		fotoPaciente = event.getFile();
	}

	public String enviarDatos() {
		String rutaDirectorioArchivos = System.getenv("OPENSHIFT_DATA_DIR");
		System.out.println("La ruta de archivos es :" + rutaDirectorioArchivos);
		System.out.println("Nombre de la foto ES =" + fotoPaciente.getFileName());
		String resultado = copiarArchivo(rutaDirectorioArchivos, fotoPaciente.getFileName(), fotoPaciente);
		if (resultado.equals("ok")) {
			System.out.println("LA FOTO SE GUARDO CORRECTAMENTE ");
		} else {
			System.out.println("ERROR LA FOTO NO SE PUDO GUARDAR");
		}

		return null;
	}

	public String enviarDatos2() {
		String rutaDirectorioArchivos = System.getenv("OPENSHIFT_DATA_DIR");
		System.out.println("La ruta de archivos es :" + rutaDirectorioArchivos);
		System.out.println("Nombre de la foto ES =" + fotoPaciente.getFileName());
		try {
			String resultado = copyFile(rutaDirectorioArchivos, fotoPaciente.getFileName(), fotoPaciente.getInputstream());
			if (resultado.equals("ok")) {
				System.out.println("LA FOTO SE GUARDO CORRECTAMENTE ");
			} else {
				System.out.println("ERROR LA FOTO NO SE PUDO GUARDAR");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}

	private String copyFile(String pathDestino, String fileName, InputStream in) throws FileNotFoundException {
		try {
			OutputStream out = new FileOutputStream(new File(pathDestino + fileName));

			int read = 0;
			byte[] bytes = new byte[1024];

			while ((read = in.read(bytes)) != -1) {
				out.write(bytes, 0, read);
			}

			in.close();
			out.flush();
			out.close();

			System.out.println("Nuevo archivo creado");
			return "ok";

		} catch (IOException e) {
			System.out.println(e.getMessage());
			return "error";
		}

	}

	public String copiarArchivo(String pathDestino, String fileName, UploadedFile archivo) {
		
		System.out.println("Entramos a copiarArchivo");
		System.out.println("La ruta destino es :" + pathDestino);
		System.out.println("El nombre de Archivo es :" + fileName);

		File path = new File(pathDestino);
		System.out.println("EXISTE EL PATH =" + path.exists());
		try {
			InputStream in = archivo.getInputstream();
			OutputStream out = new FileOutputStream(new File(pathDestino + fileName));
			int read = 0;
			byte[] bytes = new byte[1024];
			while ((read = in.read(bytes)) != -1) {
				out.write(bytes, 0, read);
			}
			in.close();
			out.flush();
			out.close();
			return "ok";
		} catch (FileNotFoundException e) {
			System.out.println("e1 " + e.getMessage());
			return "ex";
		} catch (IOException e) {
			System.out.println("e2 " + e.getMessage());
			return "ex";
		}

	}

	public UploadedFile getFotoPaciente() {
		return fotoPaciente;
	}

	public void setFotoPaciente(UploadedFile fotoPaciente) {
		this.fotoPaciente = fotoPaciente;
	}

	public String getNombrePaciente() {
		return nombrePaciente;
	}

	public void setNombrePaciente(String nombrePaciente) {
		this.nombrePaciente = nombrePaciente;
	}

}